#include "SQLArgument.h"
#include "../visitor/SQLASTVisitor.h"

// @Override
void SQLArgument::accept0(SQLASTVisitor_ptr visitor)
{
  if (visitor->visit(SharedObject(SQLArgument)))
  {
    acceptChild(visitor, expr);
  }

  visitor->endVisit(SharedObject(SQLArgument));
}

SQLObject_ptr SQLArgument::clone()
{
  SQLObject_ptr clone_tmp = std::shared_ptr<SQLArgument>(new SQLArgument());
  std::shared_ptr<SQLArgument> x = std::dynamic_pointer_cast<SQLArgument>(clone_tmp);
  // SQLArgument x = new SQLArgument();

  x->type = type;

  if (expr != nullptr)
  {
    x->setExpr(std::dynamic_pointer_cast<SQLExpr>(expr->clone()));
  }

  return x;
}

SQLParameter_ParameterType_ptr SQLArgument::getType()
{
  return type;
}

SQLExpr_ptr SQLArgument::getExpr()
{
  return expr;
}

void SQLArgument::setType(SQLParameter_ParameterType_ptr type)
{
  this->type = type;
}

void SQLArgument::setExpr(SQLExpr_ptr x)
{
  if (x != nullptr)
  {
    x->setParent(SharedObject(SQLArgument));
  }
  this->expr = x;
}
